<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1. 带参数默认值的函数

        // 函数之默认值、剩余参数
        /*
        function add(a,b){
            a = a || 10;
            b = b || 20;
            return a + b;
        }
        console.log(add());
        */
    
    
    
        /*
       function add(a = 10,b = 20) {
           return a + b;
       }
       console.log(add());
       */
    
    //    function add(a,b = 20){
    //        return a + b; 
    //    }
    //    console.log(add(30));
    
    
        /*
        // 2. 默认的表达式也可以是一个函数
        function add(a,b = getVal(5)){
            return a + b;
        }

        function getVal(val){
            return val + 5;
        }
        console.log(add(10));
        */

        /*
        function pick(obj){
            let result = Object.create(null);
            for(let i = 1; i < arguments.length; i++){
                // console.log(arguments);
                result[arguments[i]] = obj[arguments[i]]
            }
            return result;
        }
        let book = {
            title: 'es6的教程',
            author: '小马哥',
            year: 2019
        }
        let bookData = pick(book, 'author','year');
        console.log(bookData);
        */

        // 剩余参数: 由三个点...和一个紧跟着的具名参数指定 ...keys

        function pick(obj,...keys){
            // ...keys 解决了argumentssde的问题
            console.log(keys);
            let result = Object.create(null);
            for (let i = 0; i < keys.length; i++) {
                result[keys[i]] = obj[keys[i]];
            }
            return result;
        }
        let book = {
            title: 'es6的教程',
            author: '小马哥',
            year: 2019
        }
        let bookData = pick(book, 'author','year');
        console.log(bookData);

        function checkArgs(...args){
            console.log(args);
            console.log(arguments);
        }
        checkArgs('a','b','c');

        // 4. 扩展运算符
        // 剩余运算符: 把多个独立的合并到一个数组中。
        // 扩展运算符: 将一个数组分割,并将各个项作为分离的参数传给函数
    </script>
</body>
</html>
